iT邦幫忙

2023 iThome 鐵人賽

DAY 19
0

嗨~大家好~我是 Eric,今天我們來聊聊一個結構面試題,話不多說,我們來看看題目

讓以下程式碼可以正常運作:
var [a, b] = { a: 1, b: 2 };

這是因為普通的 JavaScript 物件並不是可迭代的(iterable)。所以我們使用 Symbol.iterator 來使物件可迭代,從而解決這一問題。

使用 Symbol.iterator

Symbol.iterator 是一個特殊的內建符號,用於定義一個對象的預設迭代器。通過將這個符號指向一個生成器函數,我們可以使物件變得可迭代。

Object.prototype[Symbol.iterator] = function() {
return Object.keys(this)Symbol.iterator;
};

在這個例子中,Object.prototype 添加了一個 Symbol.iterator 方法,這樣所有的物件都會繼承這個方法,並返回一個迭代器,該迭代器基於物件的 key。

var [a, b] = { a: 3, b: 4 };
console.log(a, b); // 輸出:a, b
這段程式碼現在能夠正常運作,並且會輸出物件的 key,這提供了一種非常方便的方式來解構物件的 key,而不僅僅是其值

總結

通過簡單地向 Object.prototype 添加一個 Symbol.iterator 方法,我們成功地使普通的 JavaScript 物件變得可迭代,但是這種方法會改變所有物件的原型,可能會與其他library或框架產生衝突,所以請謹慎使用這種全局修改,那麼這次的分享就到這邊,我們明天見~


上一篇
Day18 - 使用 Audio API 實現音頻視覺化
下一篇
Day19 - 奇數判斷
系列文
JavaScript 是什麼?可以吃嗎?20
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言